<!DOCTYPE html>
            
<HTML>
<HEAD>
<meta name="booktitle" content="Developing Applications With Objective Caml" >
 <meta charset="ISO-8859-1"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<META name="GENERATOR" content="hevea 1.05-7 of 2000-02-24">
<META NAME="Author" CONTENT="Christian.Queinnec@lip6.fr">
<LINK rel=stylesheet type="text/css" href="videoc-ocda.css">
<script language="JavaScript" src="videoc.js"><!--
//--></script>
<TITLE>
 To Learn More
</TITLE>
</HEAD>
<BODY class="regularBody">
<A HREF="book-ora190.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora193.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
<HR>

<H2> To Learn More</H2>Communication between distant Objective CAML programs can be rich. 
Use of text protocols is greatly facilitated by utilities for
syntactic analysis (see Chapter&nbsp;<A HREF="index.html#chap-AlexS">11</A>). The persistence
mechanism offered by the <TT>Marshal</TT> library 
(see Chapter&nbsp;<A HREF="index.html#chap-Bibliotheques">8</A>) allows sending complex data in 
its internal format including 
functional values if the two communicating programs are the same. 
The main deficiency of that mechanism is the inability to send 
instances of classes. One solution to that problem is to use 
an ORB (Object Request Broker) to transmit objects or 
invoke remote methods. This architecture already exists in many 
object-oriented languages in the form of the CORBA 
(Common ORB Architecture) standard. This standard from 
the OMG (Object Management Group), which debuted in
1990, allows the use of remote objects, and is independent of 
the implementation language used to create classes.<BR>
<BR>


<H3> Link </H3> <HR>

<A HREF="http://www.omg.org">http://www.omg.org</A>


<HR>


The two principal functions of CORBA are the ability to send objects to a 
remote program and, especially, the ability to use the same object 
at many locations in a network, in order to call methods which can 
modify its instance variables.
Further, this standard is independent of the language used to 
implement these remote objects. To that end, an ORB furnishes 
a description language for interfaces called IDL (Interface
Definition 
Language), 
in the manner of <TT>CAMLIDL</TT> for the interface between
Objective CAML and C.
For the moment, there is no ORB that works with Objective CAML, but
it is possible to build one, since the IDL language 
is an abstraction of object-oriented languages with classes. 
To simplify, CORBA furnishes a software bus (IIOP) that 
allows transferring and addressing remote data.<BR>
<BR>
The ability to reference the same object at 
many points in a network simulates distributed shared memory,
which is not without problems for automatic garbage collection.<BR>
<BR>
The ability to reference a remote object does not cause code to be 
transferred. One can only receive a copy of an instance of a class if
the class exists on the server. For certain client-server applications,
it may be necessary to use dynamic loading of code (such as in Java applets)
and even to migrate processes along with their code.
An interesting example of dynamic loading of remote code is the
MMM browser built in Objective CAML by Fran�ois Rouaix:


<H3> Link </H3> <HR>

<A HREF="http://caml.inria.fr/~rouaix/mmm/">http://caml.inria.fr/~rouaix/mmm/</A>


<HR>


This browser can be used conventionally to view Web pages, 
but can also load Objective CAML applets from a server and run them in a graphical 
window.<BR>
<BR>


<BR>
<BR>
<BR>
<BR>
<HR>
<A HREF="book-ora190.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora193.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
</BODY>
</HTML>
